原始题目:剑指 Offer 05. 替换空格 (opens new window)
解题思路:
以下思路尽量不调用 Java 的 API 。
先统计原始字符串 中的空格个数 ,最终字符串 的长度会比 S 的长度长 。
算法流程:
- 统计字符串 中空格个数 。
- 声明新的字符数组 ,长度为 。
- 重新遍历字符串 ,索引初始值为 , 索引初始值为 :
- 如果 不为空格:执行 ;
- 如果 为空格:将 的 区间的字符置为 "%20" 。
- 返回新的字符串 ;
代码:
public String replaceSpace(String s) {
if (s == null || s.length() == 0) {
return s;
}
// 先计算空格的个数,然后原数组的长度加上空格数的两倍就是答案的长度
char[] chars = s.toCharArray();
int spaceCount = 0;
for (char c : chars) {
if (c == ' ') {
spaceCount++;
}
}
char[] ans = new char[chars.length + spaceCount * 2];
int i = 0, k = 0;
while(i < chars.length) {
char c = chars[i];
if(c == ' '){
ans[k++] = '%';
ans[k++] = '2';
ans[k++] = '0';
} else {
ans[k++] = c;
}
i++;
}
return new String(ans);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
复杂度分析
**时间复杂度 **: 遍历统计使用 ,每轮修改字符使用的是 时间。
空间复杂度 : 申请的空间为线性大小的额外空间。